package cn.com.dhcc.turbo.service.registry;

import cn.com.dhcc.app.core.exception.ServiceException;
import cn.com.dhcc.turbo.entity.exch.GapInfo;
import cn.com.dhcc.turbo.entity.registry.AdapterBase;
import cn.com.dhcc.turbo.entity.registry.AdapterInfo;
import cn.com.dhcc.turbo.entity.registry.DataCategory;
import cn.com.dhcc.turbo.entity.registry.NodeInfo;
import cn.com.dhcc.turbo.service.registry.vo.PipeLineFtp;

/**
 * 
 * 基础信息服务接口
 * 
 * @TODO
 * 需求：这些基础信息数据应该从缓存中读取，避免从数据库直接读取
 *
 */
public interface BaseInfoService {
	/**
	 * 获取当前节点信息
	 * @return
	 * @throws ServiceException
	 */
	public NodeInfo getCurrentNodeInfo() throws ServiceException;

	/**
	 * 根据节点编码获取节点信息
	 * @param nodeCode
	 * @return
	 * @throws ServiceException 
	 */
	public NodeInfo getNodeInfoByCode(String nodeCode) throws ServiceException;

	/**
	 * 根据节点Id获取节点信息
	 * @param nodeId
	 * @return
	 * @throws ServiceException 
	 */
	public NodeInfo getNodeInfoById(String nodeId) throws ServiceException;

	
	
	/**
	 * 根据数据编码获取数据分类信息
	 * @param dataCode
	 * @return
	 * @throws ServiceException 
	 */
	public DataCategory getDataCategoryByCode(String dataCode) throws ServiceException;
	
	/**
	 * 根据节点编码 适配器编码获取适配器信息
	 * @param adaptorCode
	 * @return
	 * @throws ServiceException 
	 */
	public AdapterBase getAdapterBase(String adaptorCode) throws ServiceException;
	
	
	
	/**
	 * 根据节点编码 适配器编码获取适配器信息
	 * @param nodeCode
	 * @param dataCode
	 * @return
	 * @throws ServiceException 
	 */
	public AdapterInfo getAdapterInfo(String nodeCode,String adaptorCode) throws ServiceException;

	

	/**
	 * 判断双方节点是否已经建立交换关系
	 * @param fromNode
	 * @param toNode
	 * @return
	 * @throws ServiceException 
	 */
	public boolean hasExchRel(String fromNode, String toNode) throws ServiceException;

	

	/**
	 * 判断本次交换是否涉及跨网交换
	 * @param fromSys
	 * @param toSys
	 * @return
	 */
	//public boolean isCrossNet(String fromSys, String toSys) throws ServiceException;

	public PipeLineFtp getFtpPipeLineByNodeCode(String nodeCode) throws ServiceException;

	/**
	 * 获取当前节点的网闸信息
	 * @return
	 */
	public GapInfo getCurrentGapInfo() throws ServiceException;

	/**
	 * 获取当前网闸用户信息，即当前节点是选择哪个网闸进行内外网数据传输
	 * @throws ServiceException
	 */
	public String getCurrentGapNode() throws ServiceException;

	
	/**
	 * 获取某个节点的可用的网闸节点
	 * @param localNode
	 * @return
	 */
	public String getGapNode(NodeInfo localNode);
}
